package com.ssyt.yt1.day16;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

/**
 * ArrayList（集合框架里面使用频率最高的一个！）：<br/>
 * 1、自动扩容<br/>
 * 2、提供相应的集合操作方法</br/>
 * 
 * @author Administrator
 *
 */
public class ArrayListDemo {

	/**
	 * ArrayList的常用操作
	 */
	public static void test1() {
		// 声明了一个集合(必须使用包装类型)
		// ArrayList<int> arrayList = new ArrayList<>();
		ArrayList<Integer> arrayList = new ArrayList<>();
		// 向集合添加数据
		arrayList.add(123);
		arrayList.add(234);
		arrayList.add(345);
		// 取得某个值
		System.out.println(arrayList.get(0));
		// 得到集合的长度
		System.out.println(arrayList.size());
		// 循环
		for (int i = 0; i < arrayList.size(); i++) {
			System.out.print(arrayList.get(i) + "\t");
		}
		System.out.println();
		for (Integer currentValue : arrayList) {
			System.out.print(currentValue + "\t");
		}
		System.out.println();
		Iterator<Integer> iterator = arrayList.iterator();
		while (iterator.hasNext()) {
			System.out.print(iterator.next() + "\t");
		}
	}

	/**
	 * <pre>
	 * Collection（在开发中，我们很少直接使用Collection，而是直接使用子接口）
	 * 1、允许有重复元素
	 * 2、不允许有重复元素
	 * 3、队列接口（了解）
	 * 4、不允许有重复元素且一定规则排序
	 * </pre>
	 */
	public static void test2() {
		List<Integer> collection = new ArrayList<>();
		// Collection<Integer> collection = new ArrayList<>();
		collection.add(1234);
		collection.add(12345);
		collection.add(12346);
		collection.add(12347);

		for (Object currentValue : collection) {
			System.out.print(currentValue + "\t");
		}
		System.out.println();
		Iterator<Integer> iterator = collection.iterator();
		while (iterator.hasNext()) {
			Integer currentValue = iterator.next();
			System.out.print(currentValue + "\t");
		}
	}

	/**
	 * ArrayList的常用方法
	 */
	public static void test3() {
		class Computer {

			public String name;
			public double price;

			public Computer(String name, double price) {
				super();
				this.name = name;
				this.price = price;
			}

			@Override
			public String toString() {
				return "Computer [name=" + name + ", price=" + price + "]";
			}

		}
		// 声明一个集合
		List<Computer> computerList = new ArrayList<Computer>();
		// 添加
		computerList.add(new Computer("惠普", 9999));
		computerList.add(new Computer("苹果", 7890));
		computerList.add(new Computer("宏碁", 8888));
		// 修改
		Computer computer = computerList.get(0);
		computer.price = 7899;
		// 推荐（效率高）：
		computerList.set(0, computer);
		// 删除
		// computerList.remove(0);
		computerList.add(0, computer);
		// 查询单个
		System.out.println(computerList.get(0));
		// 根据指定元素删除
		// computerList.remove(computer); // remove(0);
		System.out.println(computerList);
		// 清除所有
		computerList.clear();
		System.out.println(computerList);
	}

	/**
	 * contains、addAll、retainAll
	 */
	public static void test4() {
		List<Integer> numberList = new ArrayList<Integer>();
		numberList.add(1);
		numberList.add(1);
		numberList.add(1223);
		numberList.add(13);
		// 判断集合里是否有某个值
		System.out.println(numberList.contains(13));

		List<Integer> numberList2 = new ArrayList<Integer>();
		numberList2.add(1);
		numberList2.add(6666);
		// 把两个集合连接
		numberList.addAll(numberList2);

		// 取两个集合的交集
		// numberList.retainAll(numberList2);
		System.out.println(numberList);

		// 集合去重
		Set<Integer> set = new HashSet<Integer>(numberList);
		System.out.println(set);
	}

	public static void main(String[] args) {
		// test1();
		// test2();
		// test3();
		test4();
	}
}
